<?php  

class mysqlDb
{
	protected $mysqldb = null;
    
    public function __construct()
    {
    	$this -> connect();
    }

	/**
	* 连接数据库,从配置文件读取配置信息
	*/
	public function connect()
	{
		if ($this -> mysqldb === null){
			$this -> mysqldb = mysqli_connect('127.0.0.1', 'game_online', '103243916', 'game_online');
        	$this -> mysqldb -> query('set names utf8');
		}
	}

    /**
     * 执行sql
     * @param  [string] $sql [语句]
     * @return [resource]      [资源]
     */
	public function query($sql)
	{
		return $this -> mysqldb -> query($sql);
	}

	/**
	* 查询多行数据
	* @param [string] $sql [语句]
	* @return [array]
	*/
	public function getAll($sql)
	{
		$res = $this -> query($sql);
		$data = array();
		while ($row = $res -> fetch_assoc()) {
			$data[] = $row;
		}
		return $data;
	}

	/**
	* 单行数据
	* @param [string] $sql [语句]
	* @return [array]
	*/
	public function getRow($sql)
	{
		$res = $this -> query($sql);
		return $res -> fetch_assoc();
	}

	/**
	* 查询单个数据 如 count(*)
	* @param [string] $sql [语句]
	* @return [mixed]
	*/
	public function getOne($sql)
	{
		$res = $this -> query($sql);
		return $res -> fetch_row()[0];
	}
    
	/**
	* 自动创建sql并执行插入或更新
	* @param [string] $table [表名字]
	* @param [array] $data [关联数组 键/值与表的列/值对应]
	* @param [string] $act [动作/update/insert]
	* @param [string] $where [条件,用于update]
	* @return int [新插入的行的主键值或影响行数]
	*/
	public function Exec($table, $data, $act='insert', $where='0')
	{
		if ($act == 'insert') {
			$sql = 'insert into '.$table.' ('.implode(',',array_keys($data));
			$sql .= ") values ('".implode("','", array_values($data))."')";
			$this -> query($sql);
			return $this -> lastId();
		} elseif ($act == 'update') {
			$sql = 'update '.$table.' set ';
			foreach ($data as $k => $v) {
				$sql .= $k."='".$v."',";
			}
			$sql = rtrim($sql,',').' where '.$where;
			return $this -> affectRows();
		}
	}

	/**
	* 返回上一条insert语句产生的主键值
	*/
	public function lastId()
	{
		return $this -> mysqldb -> insert_id;
	}

	/**
	* 返回上一条语句影响的行数
	*/
	public function affectRows()
	{
		return $this -> mysqldb -> affected_rows;
	}


}






?>